package com.itlong.cloud.dao;

import com.itlong.cloud.POJO.PO.SmartCardPushPO;
import com.itlong.cloud.POJO.PO.TimeTaskPushAnalysisPO;
import com.itlong.cloud.abstracts.IAbstractBaseDao;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * <desc>
 *      与旺龙一卡通对接-操作一卡通push云端的数据访问接口
 * </desc>
 *
 * @createDate 2017-11-01
 */
@Mapper
@Repository
public interface ISmartCardSyncDataPushDao extends IAbstractBaseDao<SmartCardPushPO> {
    /**
     * <desc>
     *      保存旺龙云接收一卡通推送的数据
     * <desc/>
     *
     * @param tableName 表名
     * @param smartCardPushPOS 一卡通推送到旺龙云的数据
     * @return
     * @author zhangs
     * @createDate 2017/10/31
     */
    Integer batchSavePushData(@Param("tableName") String tableName,
                              @Param("smartCardPushPOS") List<SmartCardPushPO> smartCardPushPOS);

    /**
     * <desc>
     *      创建一个独立的push表(smartcard_push_cloud_projectId)
     * </desc>
     * @param tableName 表名
     * @return
     * @author zhangs
     * @createDate 2017/11/1
     */
    void createPushTable(@Param("tableName") String tableName);

    /**
     * <desc>
     *     解析Push表中数据的定时任务获取有数据变动的push表
     * <desc/>
     *
     * @param param 查询条件（tableName, mark）
     * @return List<TimeTaskPushAnalysisPO> 定时任务临时表数据集
     * @author zhangs
     * @createDate 2017/11/3
     */
    List<TimeTaskPushAnalysisPO> getPushTableName(Map<String, Object> param);

    /**
     * <desc>
     *      存储有数据需要解析的push表信息的定时任务临时表
     * <desc/>
     *
     * @param timeTaskPushAnalysisPO 存储有数据需要解析的push表信息的定时任务临时表
     * @return 影响的数据数量
     * @author zhangs
     * @createDate 2017/11/3
     */
    Integer savePushTableName(TimeTaskPushAnalysisPO timeTaskPushAnalysisPO);

    /**
     * <desc>
     *     定时任务获取push表中未解析的数据
     * <desc/>
     *
     * @param tableName 查询条件
     * @return List<SmartCardPushPO> 旺龙一卡通push的待处理的数据集
     * @author zhangs
     * @createDate 2017/11/3
     */
    List<SmartCardPushPO> getUnresolvedPushData(@Param("tableName") String tableName);


    /**
     * <desc>
     *     更新表time_task_push_analysis中push表名对应的数据处理状态
     * <desc/>
     *
     * @param timeTaskPushAnalysisPO 存储有数据需要解析的push表信息的定时任务临时表
     * @return
     * @author zhangs
     * @createDate 2017/11/3
     */
    void updateTimeTaskPushStatus(TimeTaskPushAnalysisPO timeTaskPushAnalysisPO);

    /**
     * <desc>
     *      更新push表中已完成解析的数据的状态
     * <desc/>
     *
     * @param tableName Push表名
     * @param id 数据唯一标识
     * @author zhangs
     * @createDate 2017/11/16
     */
    void setSyncPushDataResolvedById(@Param("tableName") String tableName, @Param("id") Integer id);


    /**
    * <desc>
    *    将已处理的一卡通同步到云端到数据进行转移.
    * </desc>
    *
    * @param tableName push表
    * @return xx
    * @author LewisLouis
    * @createDate 2018-01-09
    */
    void movePushDataToColdTable(@Param("tableName") String tableName);


    /**
     * <desc>
     *    删除已转移的一卡通同步到云端到数据
     * </desc>
     *
     * @param tableName push表
     * @return xx
     * @author LewisLouis
     * @createDate 2018-01-09
     */
    void removePushData(@Param("tableName") String tableName);

    /**
     * <desc>
     *    根据设备唯一码查询设备是否是普通电梯
     * </desc>
     *
     * @param deviceUnique 设备唯一码
     * @return xx
     * @author Juguang.S
     * @createDate 2021-01-31
     */
    Integer isBlueElevatorByDeviceUnique(@Param("deviceUnique") String deviceUnique);

}
